package com.zijunlin.Zxing.Demo.Tab;

public class HValue_t {
	public Head_t head;
	//int u32Value;
	public byte szValue[];
	public final static char MAX_VALUE_LEN=320;
	
	public HValue_t()
	{
		//u32Value=0;
		head=new Head_t();
		szValue=new byte[MAX_VALUE_LEN];
		
	}
	
	
	public byte Encryption(byte b)
	{
	byte c=(byte)~(b&0x55);
	b=(byte) (b&0xAA);
	byte k=(byte) ((b& 0xAA)| (c& 0x55));
	return k;	
	}
	
	
	public byte Decryption(byte b) 
	{
		byte c=(byte)~(b&0x55);
		b=(byte) (b&0xAA);
		byte k=(byte) ((b& 0xAA)| (c& 0x55));
		return k;
	}
	
	
	
	public  void SetCRC(HValue_t pV)
	{
		byte crc=0;
		byte[] byts=new byte[364];

		SmtApplication  smtapp=new SmtApplication();
		byte[] intres=new byte[4];
		byte[] shortrs=new byte[2];
		byts[0]=pV.head.tId;
		intres=SmtApplication.int2byte(pV.head.src.id);
		for(int i=0;i<4;i++)
		{
			byts[i+1]=intres[i];
		}
		for(int i=0;i<13;i++)
		{
			byts[i + 5] = pV.head.src.pswd[i];
		}
		intres=SmtApplication.int2byte(pV.head.dst.id);
		for(int i=0;i<4;i++)
		{
			byts[i+18]=intres[i];
		}
		for(int i=0;i<13;i++)
		{
			byts[i+22]=pV.head.dst.pswd[i];
		}
		shortrs=SmtApplication.short2byte(pV.head.cmd);
		for(int i=0;i<2;i++)
		{
			byts[i+35]=shortrs[i];
		}
		shortrs=SmtApplication.short2byte(pV.head.len);
		for(int i=0;i<2;i++)
		{
			byts[i+37]=shortrs[i];
		}
		intres=SmtApplication.int2byte(pV.head.tm);
		for(int i=0;i<4;i++)
		{
			byts[i+39]=intres[i];
		}
		for(int i=0;i<pV.head.len;i++)
		{
			byts[i+43]=pV.szValue[i];
		}
        for(int i=0;i<(pV.head.len+43);i++)
        {
        	crc=(byte) (crc^byts[i]);
        }
        pV.head.crc=crc;
	}
	
	 boolean IsCRCCorrect(HValue_t pV)
	 {
		 if(pV.head.len>MAX_VALUE_LEN||pV.head.len<0)
		 return false;
			byte crc=0;
			byte[] byts=new byte[364];

			SmtApplication  smtapp=new SmtApplication();
			byte[] intres=new byte[4];
			byte[] shortrs=new byte[2];
			byts[0]=pV.head.tId;
			intres=SmtApplication.int2byte(pV.head.src.id);
			for(int i=0;i<4;i++)
			{
				byts[i+1]=intres[i];
			}
			for(int i=0;i<13;i++)
			{
				byts[i + 5] = pV.head.src.pswd[i];
			}
			intres=SmtApplication.int2byte(pV.head.dst.id);
			for(int i=0;i<4;i++)
			{
				byts[i+18]=intres[i];
			}
			for(int i=0;i<13;i++)
			{
				byts[i+22]=pV.head.dst.pswd[i];
			}
			shortrs=SmtApplication.short2byte(pV.head.cmd);
			for(int i=0;i<2;i++)
			{
				byts[i+35]=shortrs[i];
			}
			shortrs=SmtApplication.short2byte(pV.head.len);
			for(int i=0;i<2;i++)
			{
				byts[i+37]=shortrs[i];
			}
			intres=SmtApplication.int2byte(pV.head.tm);
			for(int i=0;i<4;i++)
			{
				byts[i+39]=intres[i];
			}
			for(int i=0;i<pV.head.len;i++)
			{
				byts[i+43]=pV.szValue[i];
			}
	        for(int i=0;i<(pV.head.len+43);i++)
	        {
	        	crc=(byte) (crc^byts[i]);
	        }
	        return pV.head.crc==crc;
	 }
}
